package com.ruoyi.api.service.impl;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import com.ruoyi.api.domain.BizPhone;
import com.ruoyi.api.dto.BizPhoneLocationDTO;
import com.ruoyi.api.dto.BizPhoneResourceDTO;
import com.ruoyi.api.mapper.BizPhoneMapper;
import com.ruoyi.api.utils.Base64FileUtil;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.uuid.UUID;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.api.mapper.BizPhoneRecordMapper;
import com.ruoyi.api.domain.BizPhoneRecord;
import com.ruoyi.api.service.IBizPhoneRecordService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 电话记录Service业务层处理
 *
 * @author 魏建波
 * @date 2022-01-22
 */
@Service
public class BizPhoneRecordServiceImpl implements IBizPhoneRecordService {
    @Autowired
    private BizPhoneRecordMapper bizPhoneRecordMapper;
    @Autowired
    private BizPhoneMapper bizPhoneMapper;

    /**
     * 查询电话记录
     *
     * @param id 电话记录主键
     * @return 电话记录
     */
    @Override
    public BizPhoneRecord selectBizPhoneRecordById(Long id) {
        return bizPhoneRecordMapper.selectBizPhoneRecordById(id);
    }

    /**
     * 查询电话记录列表
     *
     * @param bizPhoneRecord 电话记录
     * @return 电话记录
     */
    @Override
    public List<BizPhoneRecord> selectBizPhoneRecordList(BizPhoneRecord bizPhoneRecord) {
        return bizPhoneRecordMapper.selectBizPhoneRecordList(bizPhoneRecord);
    }

    /**
     * 新增电话记录
     *
     * @param bizPhoneRecord 电话记录
     * @return 结果
     */
    @Override
    public int insertBizPhoneRecord(BizPhoneRecord bizPhoneRecord) {
        bizPhoneRecord.setCreateTime(DateUtils.getNowDate());
        return bizPhoneRecordMapper.insertBizPhoneRecord(bizPhoneRecord);
    }

    /**
     * 修改电话记录
     *
     * @param bizPhoneRecord 电话记录
     * @return 结果
     */
    @Override
    public int updateBizPhoneRecord(BizPhoneRecord bizPhoneRecord) {
        return bizPhoneRecordMapper.updateBizPhoneRecord(bizPhoneRecord);
    }

    /**
     * 批量删除电话记录
     *
     * @param ids 需要删除的电话记录主键
     * @return 结果
     */
    @Override
    public int deleteBizPhoneRecordByIds(Long[] ids) {
        return bizPhoneRecordMapper.deleteBizPhoneRecordByIds(ids);
    }

    /**
     * 删除电话记录信息
     *
     * @param id 电话记录主键
     * @return 结果
     */
    @Override
    public int deleteBizPhoneRecordById(Long id) {
        return bizPhoneRecordMapper.deleteBizPhoneRecordById(id);
    }

    @Override
    @Transactional
    public int addRecordResource(BizPhoneResourceDTO bizPhoneResourceDTO) {
        // 根据资源类型进行存储
        try {
            System.out.println(bizPhoneResourceDTO);
            Date now = new Date();
            String directory = DateFormatUtils.format(now, "yyyy/MM/dd");
            String fileName = UUID.fastUUID().toString();
            // 默认放在图片储路径中
            String uploadDir = RuoYiConfig.getImgPath();
            // 后缀验证
            if ("1".equals(bizPhoneResourceDTO.getType())) {
                // 图片
                fileName = directory + "/" + fileName + ".jpg";
            } else if ("2".equals(bizPhoneResourceDTO.getType())) {
                // 音频
                uploadDir = RuoYiConfig.getAudioPath();
                fileName = directory + "/" + fileName + ".mp4";
            }
            File file = null;
            file = FileUploadUtils.getAbsoluteFile(uploadDir, fileName);
            String base64ImgCode = bizPhoneResourceDTO.getBase64ImgCode();
            if ("1".equals(bizPhoneResourceDTO.getType())) { // 存图片
                base64ImgCode = base64ImgCode.replace("\n", "").replace(" ", "").replace("I/System.out:", "");
                Base64FileUtil.saveBaseImage(file, base64ImgCode);
            } else if ("2".equals(bizPhoneResourceDTO.getType())) { // 存音频
                Base64FileUtil.saveBase64ToVideo(base64ImgCode,file);
            }
            // 截图存放到数据库中的字符串
            String dbPath = FileUploadUtils.getPathFileName(uploadDir, fileName);
            // 存储起来
            System.out.println("存入数据库的路径是：" + dbPath);
            BizPhoneRecord bizPhoneRecord = new BizPhoneRecord();
            bizPhoneRecord.setPhoneSn(bizPhoneResourceDTO.getPhoneSn());
            bizPhoneRecord.setResourcePath(dbPath);
            bizPhoneRecord.setResourceTypeId(Long.parseLong(bizPhoneResourceDTO.getType()));
            bizPhoneRecord.setCreateTime(DateUtils.getNowDate());
            // 验证机器码是否存在  如果不存在需要加入到数据库
            BizPhone bizPhone = new BizPhone();
            bizPhone.setPhoneSn(bizPhoneResourceDTO.getPhoneSn());
            List<BizPhone> bizPhoneList = bizPhoneMapper.selectBizPhoneList(bizPhone);
            if (bizPhoneList.size() == 0) { // 不存在
                // 存入一个呗
                bizPhoneMapper.insertBizPhone(bizPhone);
            }
            return bizPhoneRecordMapper.insertBizPhoneRecord(bizPhoneRecord);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return 0;
    }

    @Override
    public int cleanOperResourceRecord(Long type) {
        return bizPhoneRecordMapper.cleanOperResourceRecord(type);
    }
}
